int Verify( LOCAL_MATRIX_T*  local_C  /* out */, int N)
{
    int i, j,k;
    int OK = 1;
    char Out[250];
    const double 	EPS = 1.0e-7;		// Comparison tolerance

    // Maximum number of error messages that we'll print out
    const int MaxErrs = 10;
    int countErrs = 0;

    int I = grid.my_row*Order(local_C),
        J = grid.my_col*Order(local_C);
    for (i = 0; i < Order(local_C); i++){
	int ii = I + i;
        for (j = 0; j < Order(local_C); j++){
	    int jj = J + j;
            double C_exact = 0;
	    for  (k =1; k <=N; k++){
		C_exact +=  1.0/(double)((ii+1+k-1)*(k+jj+1-1));
	    }
	    if (fabs(C_exact-Entry(local_C,i,j)) > EPS ){
	       OK = 0;
               countErrs++;
               if (countErrs < MaxErrs){
                  sprintf(Out,"Entry [%d,%d] (Proc. %d) is: %f, should be: %f\n", ii,jj,grid.my_rank, Entry(local_C,i,j), C_exact);
	          cerr << Out << flush ;
	       }
               else if (countErrs == MaxErrs){
                   cerr << endl;
                   cerr << " *** Only the first " << MaxErrs << " entries in error have been reported.\n     Increase MaxErrs if you want to see more" << endl << endl;
	           cerr << Out << flush ;
               }

	    }
	}
    }

    MPI_Barrier(MPI_COMM_WORLD);
    int nsq = Order(local_C)*Order(local_C);
    if ((!grid.my_rank) && (countErrs > 0)){
         cerr  << "A total of " << countErrs << " of " << nsq << " entries (" << 
             100.0*(countErrs/nsq) << "%) were in error" << endl << endl;
         cerr << flush ;
    }

    MPI_Barrier(MPI_COMM_WORLD);
//    PPF_Print( MPI_COMM_WORLD,"local OK: %d\n",OK);
    return OK;

}  /* VerifyMatrix */
